package com.udf.flink.udaf;
/*
 * @author: create by jianglai
 * @version: v1.0
 * @description: com.dtstack.flinksql.udaf
 * @date:2021/3/25
 **/

import org.apache.flink.table.functions.AggregateFunction;

/**
 * @description：TODO
 * @author：jianglai
 * @date：2021/3/25 10:42 下午
 */
public class test extends AggregateFunction<Integer, test.Acco> {

    /**
     * @author jianglai
     * @Description: 用于返回最终的状态值
     * @date 2021/3/26
     * @params [accumulator]
     * @return java.lang.Integer
     */
    @Override
    public Integer getValue(Acco accumulator) {
        return accumulator.result;
    }

    /**
     * @author jianglai
     * @Description: 初始化累计值
     * @date 2021/3/26
     * @params []
     * @return com.dtstack.flinksql.udaf.test.Acco
     */
    @Override
    public Acco createAccumulator() {
        Acco acco = new Acco();
        acco.result = 0;
        return acco;
    }

    /**
     * @author jianglai
     * @Description: 用于存放中间状态的值。
     * @date 2021/3/26
     * @params
     * @return
     */
    public class Acco {
        public int result;
    }

    /**
     * @author jianglai
     * @Description: 提供了根据输入参数更新状态。
     * @date 2021/3/26
     * @params [acco, invalue]
     * @return void
     */
    public void accumulate(Acco acco, Object invalue){
        acco.result += Integer.parseInt((String) invalue) ;
    }
}
